﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SafeScript.MetaModel
{
    public interface ITypeDef
    {
        bool IsEqualTo(ITypeDef typedef);
        bool CanBeAssignedTo(ITypeDef typedef);
        /// <summary>
        /// 
        /// </summary>
        /// <param name="typedef"></param>
        /// <returns>-1 means that this type does not inherit from the other type.
        /// A value of 0 means that this type equals the other type.</returns>
        int GetInheritanceDepth(ITypeDef typedef);

        ITypeDef Instantiate(Dictionary<TemplateParameterType, ITypeDef> templateArguments);
    }
}
